Google Cloud Certified Professional Data Engineer: Pr. Tests①
BigQuery
アナリストはreportingタスク、サイエンティストはML、その他従業員も色々使ってる
→コストをコントロールしたい
ユーザー毎にカスタムクォータを設定する
カスタムクォータはプロジェクトレベルとユーザーレベルとで設定できる
DataprocからBigQueryにアクセスしたい
DataprocにBigQueryコネクターをインストールしてクラスタ作成する
BigQuery→GCS→Dataproc
ジョブが失敗した場合はGCSの一時ファイルは手動で削除せなあかん
Bigqueryに格納されてるwebサイトのログから購入予測のモデルを作成したい
BigQueryML
10秒おきに25000のセンサーからデータが送信されてGCSに置かれる→SQLを使って分析したいのでBigQuery
センサー→GCS→BigQuery
/icons/point.iconデータは異なる属性を持っている
Schema auto-detectionでBigQueryに取り込む
既存のテーブルのカラム名を変更したい
新しいスキーマのテーブルを作成して既存のデータをインサートする
BQテーブルではカラム名、タイプ、必須とかを変更することはできない→Alterなど無理
ETLの中でGCSのデータに対してSQLしたい
GCS→BigQuery Exteral tablesのSQLで変換→BigQueryのテーブルに格納
auto-detectionでimportした時にデータがおかしい→ローカルで確認したら問題ない
→BQでサポートされていないencoding
encodingを明示してインポートすると成功する
クエリのキャッシュが効いていない原因
current_timestamp関数を使っている
日付分割テーブルにwildcardを使用している
グローバル企業で各リージョンにバケットがある。異なるリージョンからだとBQにデータを格納できなくてこまる
バケットのデータを日次でsyncさせることにした→Storage Transfer Service
Bigtable
HDD→SSDの変更でデータをロストしないように切り替えたい
新しいインスタンスを作成してデータをdataflowで入れ直す
膨大なセンサーからjsonデータが収集されて、時系列分析したい時はBigtableを使用する
event data
time series analysis
決済トランザクションから時系列分析で不正検知したい
リアルタイム性が必要なのでGCS+Dataprocとかはなし
/icons/point.icontall & narrow tableなスキーマ設計をしたBigTable
システムログ、数千のログ、たまに見る、異なるログの構造になっていたりする
BigtableのHDD
街の道路状況から常に最適なルートをユーザに知らせるナビアプリ
常に最新の状態についてのクエリが飛び交って、道路状況のデータの書き込みとかも起こる
→Bigtable
パフォーマンステスト
最低でも300GBのデータでテストする
3nodeでそれぞれ100GB以上
テストの前にテストを数分行う
データアクセスを元にBigtable内のノードでデータの適切な配置が行われるため
最低でも10分間テストをする
ディスクからの読み込みではなくメモリキャッシュからの最適な読み込みに移行する
予想よりもパフォーマンスがでない
ノードが足りていない
行のセルが多すぎる
一行のデータサイズが大きすぎる
テーブルスキーマ設計が良くない
Bigtableに向いていないワークロード(データが少ないとか、少しの時間しか稼働していなくノード間でデータを適切に配置できていない)
HDD
Developmentインスタンスを使用している
Dataflow
クライアントから受け取るファイル→Dataflow→BigQueryのパイプラインを定期実行したい
Cloud Scheduler
手動でデータ修正が入るときもあるのでCSVが再度格納されたら自動でre runしたい。
Composerを使ってカスタムセンサーでファイルのチェンジを検知する
MMOでユーザーの最新状態、平均ping、オンラインのユーザー数をtime window 30秒
sliding time window
epaymentサービスでwebブラウザを10分くらい開きっぱなしになっていてセッションがアイドル状態になっている場合は何もアクションできないようにしたい
hiroki.iconawsとかでもあるね
これを実現するためのdataflowのwindow functionは?
セッションウィンドウ→最小ギャップ時間を10分に設定する
2つのパイプラインでデータをシェアする
GCSでシェアする
Dataflowには異なるパイプラインでデータを共有する機能はない
Dataproc
OrcはHDFS 向けに最適化された CSV のようなデータ形式
オンプレのHdoopからGCPに移行
Dataproc + GCS
開発体験が悪いのでSparkを使うことにした。速度はクリティカルではない(high cpuじゃなくていい)
standard mode + high memory
Pub/Sub
センサーデータの収集でkafkaを使っているがボトルネックになっている→pub/subを使う
GDPR対応でユーザーが自分のログをダウンロードできるようにしなければいけない。同期処理だとタイムアウトしてしまう
Pub/Subのpull型でバッチ処理して、ユーザーにダウンロードリンクをemailで送信する
Cloud SQL
高可用性
フェイルオーバーレプリカ
DataPortal
一日に一度しかデータが更新されないダッシュボードから何回もクエリが飛んで無駄
BigQueryのキャッシュを有効化する
機械学習
混同行列でfalse positiveがでかい→モデルのaccuracyを改善するためには? Auto MLでは画像をconfusedなものでソートできる→どんなものが間違えているか目視で確認する
/icons/point.icon質の低い画像を削除するというのは不正解だった
50~70%のテストデータを使ってAutoMLでモデルを学習させる
2,3週間後にはモデルを組み込みたい→AutoML
モデルが過学習している
特徴量を減らす→バリアンスを減らす
学習データ量を増やす
正則化(Regularization)を増やす→特徴量を減らすことと同じ→バリアンスを減らす
GPUとTPUどっちを使う→TPU(テンソルプロセッシングユニット)
TPUはディープラーニングを高速化する
https://gyazo.com/c6be0f53c7b5885bb714cbf95cb576f4
tumor(腫瘍)を判別するモデル
Recall(再現率)を高める→腫瘍である可能性が少しでもあるなら、それをtrueと判定して精密検査したい
tensorflowモデルをデプロイして予測時のレイテンシーを最小限にしたい
Cloud MachineLearningEngine
オンライン予測モード
Tensorflowのモデルをデプロイする
Google Machine Learning Engine